Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa
Pysa 是一款静态分工具,用于在代码运行/编译前静态扫描代码,发现已知的可能代表潜在bug 的模式,之后开发人员标记潜在问题。
Facebook 表示,Pysa 由公司内部开发,通过不断改进已变得成熟。例如,Facebook 指出,在2020年上半年,在Instagram 服务器端 Python 代码中的所有漏洞中,44%的安全问题是由 Pysa检测出的。
专为安全团队开发
尽管 Pysa 基于 Pyre 项目的开源代码而开发,但 Pysa是根据安全团队的需求构建的。多数静态分析工具寻找的是各种 bug,但Pysa专用于查找和安全性相关的问题。更具体而言,Pysa 追踪的是“程序中的数据流”。数据在程序代码中如何流动非常重要,当前多数安全 exploit 利用的是未过滤或不受控的数据流。例如,当前最严重的 bug 类型远程代码执行 (RCE) 漏洞,本质起因是用户输入到达代码库不必要的区域。
Pysa 旨在探究数据如何在代码库中流动,尤其是由数万或数百万行代码组成的大型代码库中如何流动。
这一概念并不新鲜,Facebook 早在 Zoncolan 中就已实现。Zoncolan 是一款静态分析工具,发布于2019年8月,用于检测 Facebook 主 app 代码中所使用的 PHP 等语言变体中的问题。Pysa 和 Zoncolan 寻找的是“来源 (sources)”(数据进入代码库的地方)和“下沉 (sinks)”(数据结束的地方)。这两款工具都会追踪数据如何在代码库中移动并找到危险的“下沉”如可执行代码或检索敏感用户数据的函数。如发现来源和危险下沉之间的连接,Pysa(和 Zoncolan)就会发出警告信息,提醒开发人员开展调查。
Facebook 安全团队深度参与了 Pysa 的创建,它已经过数月的内部测试,找到和常见安全问题如跨站点脚本、远程代码执行、SQL 注入等专有的来源-下沉模式。
检测速度快,专为大型代码库创建
正如 Facebook 的安全工程师 Graham Bleaney 所述,如果 Pysa 需要数天的时间才能查找完整个 Instagram 代码库中的安全问题,则它的作用没那么大。因而,Pysa 的优势也在于速度,能够在30分钟到数小时不等的时间内遍历完数百万行代码,这就使得 Pysa 几乎能够实时找到 bug 而开发人员不必担心 Pysa 会耽误代码交付或延误最后期限,将 Pysa 集成到常规工作流和例程中。
这种专注于不破坏 Facebook 开发人员及其常规工作流程的特点已成为 Facebook 安全团队的目标。
可扩展
Pysa 的另外一个优势是可扩展性。Instagram 基本由 Python 代码构建而成,二者从一开始就未被开发为一个整体。和多数主流平台一样,Instagram的代码是随着公司的发展壮大而不断改进的。当前它的代码库包括很多不同的 Python 框架和 Python 库,它们均运行于Instagram 不同的组件和特征上。这意味着 Pysa 以“即插即拔”的模式创建,它可在运行中配合新框架。
Bleaney 表示,“由于我们自己的产品中使用了开源的 Python 服务器框架如 Django 和 Tornado,因此 Pysa 能够在一开始运行时就能使用这些框架查找项目中的安全问题。在目前尚未涵盖的框架中使用 Pysa 也非常简单,只需增加几行配置告知 Pysa 在服务器中输入代码的地方即可。”
Facebook 已正式在 GitHub 上开源了 Pysa 工具,并说明了多个有助于查找安全问题的 bug 定义。自去年借助 Pysa 发现一个重大安全问题后,Zulip 服务器项目已将 Pysa 内嵌在代码库中。
Pysa 的 GitHub 地址:https://github.com/facebook/pyre-check/。
谷歌开源漏洞扫描器“海啸”,专为大型企业服务
https://www.zdnet.com/article/facebook-open-sources-one-of-instagrams-security-tools/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。